package saltocaballo;

import java.util.ArrayList;
import java.util.List;

import aima.search.framework.Successor;
import aima.search.framework.SuccessorFunction;

public class SaltoCaballoSuccessorFunction implements SuccessorFunction{

	@SuppressWarnings("unchecked")
	@Override
	public List getSuccessors(Object state) {
		
		// Creamos la lista donde almacenar los estados sucesores
		List<Successor> successors = new ArrayList<Successor>();
		
		SaltoCaballoEstado estadoActual = (SaltoCaballoEstado) state;
		
		SaltoCaballoEstado nuevoEstado = null;
		
		// Para cada movimiento...
		for (int i=0; i < SaltoCaballoEstado.getNumMovimientos(); i++)
			// ...si es posible realizarlo...
			if (estadoActual.esPosibleMover(i)){
				// ...se crea un estado nuevo (copia del actual)...
				nuevoEstado = new SaltoCaballoEstado(estadoActual);
				// ...se realiza el movimiento...
				nuevoEstado.moverCaballo(i);
				// ...y se almacena en la lista de sucesores
				successors.add(new Successor("Mov" + i, nuevoEstado));
			}
		
		return successors;
	}

}
